/*
 * @Description: 混入
 * @Autor: HuiSir<273250950@qq.com>
 * @Date: 2021-05-20 16:06:13
 * @LastEditTime: 2021-05-20 16:06:13
 */
//代码里首先定义了两个类，它们将做为mixins。 可以看到每个类都只定义了一个特定的行为或功能。
// 稍后我们使用它们来创建一个新类，同时具有这两种功能。
// 
// Disposable Mixin
var Disposable = /** @class */ (function () {
    function Disposable() {
    }
    Disposable.prototype.dispose = function () {
        this.isDisposed = true;
    };
    return Disposable;
}());
// Activatable Mixin
var Activatable = /** @class */ (function () {
    function Activatable() {
    }
    Activatable.prototype.activate = function () {
        this.isActive = true;
    };
    Activatable.prototype.deactivate = function () {
        this.isActive = false;
    };
    return Activatable;
}());
// 首先应该注意到的是，没使用extends而是使用implements。 把类当成了接口，
// 仅使用Disposable和Activatable的类型而非其实现。 这意味着我们需要在类里面实现接口。 但是这是我们在用mixin时想避免的。
var SmartObject = /** @class */ (function () {
    function SmartObject() {
        var _this = this;
        /**
         * 我们可以这么做来达到目的，为将要mixin进来的属性方法创建出占位属性。
         * 这告诉编译器这些成员在运行时是可用的。 这样就能使用mixin带来的便利，虽说需要提前定义一些占位属性。
         */
        // Disposable
        this.isDisposed = false;
        // Activatable
        this.isActive = false;
        setInterval(function () { return console.log(_this.isActive + " : " + _this.isDisposed); }, 500);
    }
    SmartObject.prototype.interact = function () {
        this.activate();
    };
    return SmartObject;
}());
